package com.stu.vertx.hello.designPattern.singleton.lazyStyle;

/**
 * 懒汉式（使用时进行初始化）
 */
public class Singleton {

    // 私有化成员变量(在类加载的时候就已经创建了)
    private static Singleton singleton = null;

    // 私有化构造(不允许new)
    private Singleton() {
    }

    // 对外提供公共的获取方法
//    public static Singleton getSingleton() {
//        if (singleton == null) {
//
//            singleton = new Singleton();
//        }
//        return singleton;
//    }

    // 对外提供公共的获取方法
//    public static Singleton getSingleton() {
//        synchronized (Singleton.class){
//            if (singleton == null) {
//                try {
//                    Thread.sleep(10);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//                singleton = new Singleton();
//            }
//            return singleton;
//        }
//    }

    public static Singleton getSingleton() {
        // 检查是否需要阻塞(并不是所有的线程上来就阻塞)
        if (singleton == null) {

            // 获取到锁的线程才进去
            synchronized (Singleton.class){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 重新判断,因为前面有可能多条线程都通过了if判断
                if(singleton==null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}